﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sistema.Dao;
using Sistema.Modelo;
using System.Data.SqlClient;
using Sistema.Visao.Pessoa.Estado;

namespace Sistema.Visao.Pessoa.Cidade
{//abre o namespace
    public partial class dataCidade : Form
    {//abre o form
        //variaveis globais
        formCidade cidade;
        int opcao,auxCodigo,codEstado,ultimoCodigo,codCadastro,auxTabela = 0;
        Boolean op,tabZerada;
        string ibge,auxPesquisa,nomeCidade;
        CidadeMod mod = new CidadeMod();// variavel da classe modelo
        CidadeDao dao = new CidadeDao();// variavel da classe dao
        EstadoDao daop = new EstadoDao();
        
        public dataCidade()
        {//abre o construtor padrao
            InitializeComponent();
        }//fecha o construtor

        //construtor lincado com formcidade para cadastro
        public dataCidade(formCidade aux, Boolean auxiliar, int codigoUltim, Boolean tabelaZerada)
        {//abre o construtor
            InitializeComponent();
            cidade = aux;
            op = auxiliar;
            ultimoCodigo = codigoUltim;
            tabZerada = tabelaZerada;
        }//fecha o construtor

        //construtor lincado com formcidade para alteração
         public dataCidade(formCidade aux, string aux2, Boolean auxiliar, int cod, string codibge, int codigoEstado)
        {//abre o construtor
            InitializeComponent();
            cidade = aux;
            nomeCidade = aux2;
            op = auxiliar;
            auxCodigo = cod;
            ibge = codibge;
            codEstado = codigoEstado;
        }//fecha o construtor
        

        public void atualizaCombo(int Selecao, String Busca)
        {//aber o atualizacombo

            daop.SelecionarEstado(Busca, Selecao);
            SqlDataAdapter i = daop.getSelect();
            DataTable da = new DataTable();
            i.Fill(da);

            cbCodigo.DataSource = da;
            cbCodigo.DisplayMember = "Estado_Codigo";
            cbCodigo.ValueMember = "Estado_Codigo";


            cbEstado.DataSource = da;
            cbEstado.DisplayMember = "Estado_Nome";
            cbEstado.ValueMember = "Estado_Nome";
            tbEstado.Text = cbEstado.Text;//passa o valor para o campos de estado
        }//fecha o atualizacombo

        //metodo caso o usuario clique em cadastrar novamente, para alterar o código para cadastro
        public void verifica()
        {//abre o metodo verifica
            if (auxTabela == 1)
            {//abre o if
                ultimoCodigo = +1;
            }//fecha o if
        }//fecha o verifica



        private void button1_Click(object sender, EventArgs e)
        {


            if (op == true)//se op for igual a true sgnifica que a opção é de cadastro
            {//abre o if
                //messagem para perguntar se deseja mesmo cadastrar o pais
                DialogResult Result = MessageBox.Show("Tem certeza que deseja cadastrar a Cidade " + tbCidade.Text, "Cadastro de Cidade", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (Result == DialogResult.Yes)
                {//abre o if 2

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    // if e else para definir o codigo
                    if (tabZerada != true)//confere se a tabela não esta vazia
                    {//abre o if 3
                        ultimoCodigo += 1;//pega o ultimo codigo e adiciona + 1 para cadastro
                        mod.Cidade_Codigo = ultimoCodigo;//passa o valor do codigo para cadastro

                    }//fecha o if 3
                    else
                    {
                        verifica();
                        auxTabela = 1;
                        mod.Cidade_Codigo = ultimoCodigo;
                    }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                    //passa valores para o cadastro
                    mod.Cidade_Nome = tbCidade.Text;
                    mod.Cidade_Codigo_IBGE = Convert.ToInt32(tbIbge.Text);
                    mod.Estado_Codigo = Convert.ToInt32(cbCodigo.Text);
                    dao.ExecutarProcedimentoCidade(mod, 1); // passando os valores da camanda modelo para a dao para poder realizar a execucao no banco 
                    MessageBox.Show(Convert.ToString(dao.getMensagem()));// retornando a mensagem da operacao no banco de dados
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //message para perguntar se que um novo cadastro
                    DialogResult ResultNovoCadastro = MessageBox.Show("Gostaria de fazer outro cadastro", "Cadastro de Estado", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    // se responder sim, fazer novo cadastro
                    if (ResultNovoCadastro == DialogResult.Yes)
                    {//abre o if do novo cadastro

                        tbEstado.Clear();
                        tbIbge.Clear();
                        tbCidade.Clear();//limpa o campo
                    }//fecha o if do novo cadastro
                    // se responder nao, sair do form
                    else if (ResultNovoCadastro == DialogResult.No)
                    {//abre o else if do novo cadastro
                        cidade.AtualizarGrid(0, "");
                        cidade.pegadados();
                        this.Hide();
                    }//fecha o else if do novo cadastro
                
                }//fecha o if 2
            }//fecha o if
            else
            {//abre o else
                //alteração
                mod.Cidade_Nome = tbCidade.Text;
                mod.Cidade_Codigo_IBGE = Convert.ToInt32(tbIbge.Text);
                mod.Cidade_Codigo = auxCodigo;
                mod.Estado_Codigo = Convert.ToInt32(cbCodigo.Text);
                dao.ExecutarProcedimentoCidade(mod, 2); // passando os valores da camanda modelo para a dao para poder realizar a execucao no banco 
                MessageBox.Show(Convert.ToString(dao.getMensagem()));// retornando a mensagem da operacao no banco de dados
                cidade.AtualizarGrid(0, "");
                cidade.pegadados();
                this.Hide();
            }//fecha o else
        }//fecha o button1

        private void dataCidade_Load(object sender, EventArgs e)
        {//abre o load
            tbEstado.BackColor = Color.White;
            if (op == true)//opção de cadastro
            {//abre o if
                atualizaCombo(0, "");
            }//fecha o if
            else
            {//abre o else
                atualizaCombo(7, Convert.ToString(codEstado));
                tbCidade.Text = nomeCidade;
                tbIbge.Text = ibge;
            }//fecha o else
            
        }//fecha o load

        private void button3_Click(object sender, EventArgs e)
        {//abre o button3
            formEstado vai = new formEstado(this, opcao);
            vai.ShowDialog();
        }//fecha o button3

        private void btSair_Click(object sender, EventArgs e)
        {//abre o btSair
            cidade.AtualizarGrid(0, "");
            cidade.pegadados();
            this.Hide();
        }//fecha o btSair

        private void cbEstado_MouseClick(object sender, MouseEventArgs e)
        {//abre o mouse click do cbEstado
            formEstado vai = new formEstado(this, opcao);
            vai.ShowDialog();
        }

        private void tbEstado_MouseClick(object sender, MouseEventArgs e)
        {
            formEstado vai = new formEstado(this, opcao);
            vai.ShowDialog();
        }//fecha o mouse click do cbestado
    }//fecha o form
}//fecha o namespace
